Generally, memory used to store data in a computing system can be volatile (to store volatile information) or non-volatile (to store persistent information). Volatile data structures stored in volatile memory are used for temporary and intermediate information that is required to support the functionality of a program during the run-time of the program. On the other hand, persistent data structures stored in non-volatile memory are available beyond the run-time of a program and can be reused. Moreover, new data is typically generated as volatile data first, before the user or programmer decides to make the data persistent. For example, programmers or users may cause mapping (i.e., instantiating) of volatile structures in volatile main memory that is directly accessible by a processor. Persistent data structures, on the other hand, are instantiated on non-volatile storage devices like rotating disks attached to Input/Output (I/O or IO) buses or non-volatile memory based devices like flash memory. Persistent information is therefore not directly accessible by a processor and needs to be copied from non-volatile storage to main memory in order to become usable as volatile data by the processor.
One problem with this approach lies in the inefficiency of changing the state of information from volatile to persistent and back. The procedure has to copy the main contents of the data structure from storage (persistent region) to main memory (volatile region) and back. This incurs unnecessary overhead in terms of power consumption, performance, and/or memory footprint. For instance, volatile memory regions may be mapped to main memory (e.g., DRAM (Dynamic Random Access Memory)) and persistent memory regions may be mapped to non-volatile storage devices (such as flash or rotating disk drives). The approach works the same way and has the same inefficiency with having to copy between volatile and non-volatile persistent regions even if the same memory technology was used for both (e.g., by mapping a RAM (Random Access Memory) storage onto main memory).
Furthermore, rotating or hard disk drives provide a relatively low-cost storage solution and are used in many computing devices to provide non-volatile storage. Disk drives, however, can use a lot of power when compared to flash memory since a disk drive needs to spin its disks at a relatively high speed and move disk heads relative to the spinning disks to read/write data. All this physical movement generates heat and increases power consumption. To this end, some higher end mobile devices are migrating towards non-volatile devices without moving parts, such as flash memory and solid state drives. However, flash memory has a number of drawbacks too including, for example, relatively large voltage level requirement to change bit states, delay in write times due to requirement of a charge pump ramp up, having to erase a block of cells at a time, etc.